Adding filters based on the query
Applying a custom filter for a specific query.
Sometimes, specific terms can act as cues that you can use to filter search results. You can use positive, negative, or numerical filters:
- Positive filters include a specific subset of matching records in the results. For example, if a user types “diet” on a restaurant website, return every record that has “low-carb” or “low-fat”.
- Negative filters exclude matching records from results. For example, if a user types “gluten-free” on a restaurant website, you could filter out any gluten-containing meal.
- Numerical filters convert text queries into a numerical range. For example, if a user types “cheap” on a website for kitchen appliances, you could filter out anything costing more than $50.
Positive filters
If you want to filter out every non-diet-friendly meal whenever user’s search queries contain the term “diet”,
you could use the _tags
attribute to categorize meals depending on their individual qualities:
When users include the term “diet” in their search, you want to automatically return every record that has “low-carb” or “low-fat” in their _tags
attribute. Because _tags
is already optimized for filtering, you don’t have to set it as an attribute for faceting. You can directly create a new Rule that detects the term “diet” in a query and applies a positive filter on tags “low-carb” and “low-fat”.
To use the term “diet” only for filtering and not as a search term, add a consequence in your rule to remove the word from your query.
Using the API
To add a rule, use the saveRule
method.
When creating a rule, you must define a condition and a consequence.
Using the dashboard
You can also add rules from the Algolia dashboard.
-
Select the Search product icon on your dashboard.
-
Select the Rules section from the left sidebar menu in the Algolia dashboard.
-
Under the heading Rules, select the index to which you’re adding a Rule.
-
Select Create your first rule or New rule. In the drop-down menu, select Manual Editor.
-
In the Condition(s) sections, keep Query contains and enter “diet” in the input field.
-
In the Consequence(s) section:
- Click the Add consequence button and select Add Query Parameter.
- In the input field that appears, enter the JSON search parameter you want to add. For example:
{ "filters": "'low-carb' OR 'low-fat'" }
. - Click the Add consequence button again and select Remove Word.
- Type or select “diet” in the input field.
-
Save your changes.
Negative filters
To exclude gluten-containing foods from the search results, when a user searches for gluten-free meals: To do this:
- Create an
allergens
attribute (with “gluten” as one of the potential values). - Create a rule that filters out records with “gluten” in that attribute.
Example records
Using the API
Set allergens
as an attributesForFaceting
in your index:
- Use the
saveRule
method to create a rule that detects the term “gluten-free” in a query and applies a negative filter on facet valueallergens:gluten
. - Add a consequence in your rule to remove the word “gluten-free” from your query. This way, it won’t be used as a search term, only for filtering purposes.
Using the dashboard
You can also add rules from the Algolia dashboard.
-
Select the Search product icon on your dashboard and then select your index.
-
Click the Configuration tab.
-
In the Facets subsection of Filtering and Faceting, click the “Add an attribute” button and select the
allergens
attribute from the drop-down menu. -
Click the Rules tab.
-
Select Create your first rule or New rule. In the drop-down menu, select Manual Editor.
-
In the Condition(s) section, keep Query toggled on, select Contains in the drop-down menu, and enter “gluten-free” in the input field.
-
In the Consequence(s) section:
- Click the Add consequence button and select Add Query Parameter.
- In the input field that appears, enter the JSON search parameter you want to add. For example:
{ "filters": "NOT allergens:gluten" }
- Click the Add consequence button again and select Remove Word.
- Type or select “gluten-free” in the input field.
-
Save your changes.
Numerical filters
Consider the query “cheap toaster 800w”. You can use Rules to filter the results by “toaster” and “prices between 0 and 25” so that the only textual search is the remaining term, “800w”, which could further be used to limit the results with that wattage.
Rule
If query = “cheap toaster” then price < 10 and type=toaster
This requires two rules.
Using the API
Using the dashboard
Since there are two rules, you must set up both separately.
Preparation
- Select the Search product icon on your dashboard and then select your index.
- Click the Configuration tab.
- In the Facets subsection of Filtering and Faceting, click the “Add an attribute” button and select the
product_type
attribute from the drop-down menu.
For the first rule
-
Select the Rules section from the left sidebar menu in the Algolia dashboard.
-
Under the heading Rules, select the index to which you’re adding a rule.
-
Select Create your first rule or New rule. In the drop-down menu, click the Manual Editor option.
-
In the Condition(s) section, keep Query toggled on, select Contains in the drop-down menu, and enter “toaster” in the input field.
-
In the Consequence(s) section:
- Click the Add consequence button and select Add Query Parameter.
- In the input field that appears, add the JSON parameters you want to apply when the user’s query matches the Rule:
{ "filters": "product_type:toaster" }
- Click the Add consequence button again and select Remove Word.
- Type or select “toaster” in the input field.
-
Save your changes.
For the second rule
-
Go back to the Rules section.
-
Select New rule. In the drop-down menu, click the Manual Editor option.
-
In the Condition(s) section, keep Query toggled on, select Contains in the drop-down menu, and enter “cheap” in the input field.
-
In the Consequence(s) section:
- Click the Add consequence button and select Add Query Parameter.
- In the input field that appears, add the JSON parameters you want to apply when the user’s query matches the Rule:
{ "filters": "price<10" }
- Click the Add consequence button again and select Remove Word.
- Type or select “cheap” in the input field.
-
Save your changes.